use automation::spider_utils::{SpiderClient, CrawlConfiguration};
use log::{info, warn};
use dotenvy::dotenv;
use anyhow::Result;

#[tokio::main]
async fn main() -> Result<()> {
    // 初始化环境变量和日志
    dotenv().ok();
    env_logger::init();

    // 创建爬虫配置
    let base_url = "https://cisco.github.io/ChezScheme/csug/";
    let crawl_config = CrawlConfiguration {
        respect_robots_txt: false,
        subdomains: true,
        tld: true,
        delay: 0,
        depth: 4,  // 设置足够大的深度以爬取所有页面
        page_limit: 100,
        timeout: 60,
        user_agent: Some("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36".to_string()),
        verbose: true,
        whitelist_url: Some(vec![base_url.to_string()]), // 只爬取base_url下的页面
        blacklist_url: None,
    };

    // 创建爬虫客户端
    let mut spider_client = SpiderClient::new(base_url, Some(crawl_config));

    // 执行爬取
    info!("开始爬取网站: {}", base_url);
    let results = spider_client.crawl().await?;

    info!("爬取成功，共爬取到 {} 个页面", results.len());
    if results.is_empty() {
        warn!("警告: 爬取结果为空，请检查爬虫配置或网站结构");
    } else {
        // 输出所有爬取到的 URL
        for (i, result) in results.iter().enumerate() {
            info!("爬取到的页面 {}: {}", i + 1, result.url);
        }
    }

    info!("爬取完成，共爬取到 {} 个页面", results.len());

    // 尝试使用不同的配置再次爬取
    info!("尝试使用不同的配置再次爬取");

    // 使用不同的配置
    let crawl_config2 = CrawlConfiguration {
        respect_robots_txt: false,
        subdomains: true,
        tld: true,
        delay: 0,
        depth: 5,  // 增加深度，确保能爬取到所有页面
        page_limit: 200,  // 增加页面限制
        timeout: 120,  // 增加超时时间
        user_agent: Some("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36".to_string()),
        verbose: true,
        whitelist_url: Some(vec![base_url.to_string()]), // 只爬取base_url下的页面
        blacklist_url: None,
    };

    // 创建新的爬虫客户端
    let mut spider_client2 = SpiderClient::new(base_url, Some(crawl_config2));

    // 执行爬取
    info!("开始第二次爬取网站: {}", base_url);
    let results2 = spider_client2.crawl().await?;

    info!("第二次爬取成功，共爬取到 {} 个页面", results2.len());
    if results2.is_empty() {
        warn!("警告: 第二次爬取结果为空，请检查爬虫配置或网站结构");
    } else {
        // 输出所有爬取到的 URL
        for (i, result) in results2.iter().enumerate().take(10) {
            info!("第二次爬取到的页面 {}: {}", i + 1, result.url);
        }
    }

    info!("第二次爬取完成，共爬取到 {} 个页面", results2.len());

    Ok(())
}
